/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.lib.ddl.impl;
import java.beans.*;
import java.sql.*;
import java.util.*;
import org.netbeans.lib.ddl.*;
import org.netbeans.lib.ddl.adaptors.*;
import org.netbeans.lib.ddl.impl.*;
import org.openide.*;
/**
* @author Radko Najman
*/
public class DriverSpecification {
/** Used DBConnection */
private HashMap desc;
public ResultSet rs, rsTemp;
/** Owned factory */
SpecificationFactory factory;
/** Constructor */
public DriverSpecification(HashMap description)
{
desc = description;
}
public DriverSpecificationFactory getDriverSpecificationFactory()
{
return factory;
}
public void setDriverSpecificationFactory(DriverSpecificationFactory fac)
{
factory = (SpecificationFactory) fac;
}
private String getCatalog() {
return (String) desc.get("get_Catalog");
}
private String getSchema() {
return (String) desc.get("get_Schema");
}
public void getTables(String catalog, DatabaseMetaData dmd, String tableNamePattern, String[] types) {
String schemaPattern = null;
boolean caseindentifiers;
if (tableNamePattern != null)
try {
caseindentifiers = dmd.storesMixedCaseIdentifiers();
if (!caseindentifiers) {
caseindentifiers = dmd.storesUpperCaseIdentifiers();
tableNamePattern = (caseindentifiers ? tableNamePattern.toUpperCase() : tableNamePattern.toLowerCase());
}
} catch (SQLException ex) {
// System.out.println("Mixed identifiers: " + ex);
}
try {
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schemaPattern = dmd.getUserName().trim();
if ((tableNamePattern == null) && (!desc.get("getTables_TableNamePattern").equals("null")))
tableNamePattern = (String) desc.get("getTables_TableNamePattern");
if (desc.get("getTables_Types").equals("null"))
types = null;
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getTables(catalog, schemaPattern, tableNamePattern, types);
return;
}
} catch (SQLException ex) {
// System.out.println("getTablesAdaptor: CANNOT OBTAIN TABLES: " + ex);
rs = null;
}
try {
// System.out.println("1. PASS - Tables: " + dmd.getDriverName());
rs = dmd.getTables(catalog, schemaPattern, null, types);
checkResultSet();
rs.close();
rs = dmd.getTables(catalog, schemaPattern, null, types);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - Tables: " + dmd.getDriverName());
rs = dmd.getTables(null, schemaPattern, null, types);
checkResultSet();
rs.close();
rs = dmd.getTables(null, schemaPattern, null, types);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - Tables: " + dmd.getDriverName());
rs = dmd.getTables(catalog, null, null, types);
checkResultSet();
rs.close();
rs = dmd.getTables(catalog, null, null, types);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - Tables: " + dmd.getDriverName());
rs = dmd.getTables(null, null, null, null);
} catch (Exception ex3) {
// System.out.println("NO TABLES: " + ex3);
rs = null;
}
}
}
}
}
public void getProcedures(String catalog, DatabaseMetaData dmd, String procedureNamePattern) {
String schemaPattern = null;
try {
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schemaPattern = dmd.getUserName().trim();
if ((procedureNamePattern == null) && (!desc.get("getProcedures_ProcedureNamePattern").equals("null")))
procedureNamePattern = (String) desc.get("getProcedures_ProcedureNamePattern");
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getProcedures(catalog, schemaPattern, procedureNamePattern);
return;
}
} catch (SQLException ex) {
// System.out.println("getProceduresAdaptor: CANNOT OBTAIN PROCEDURES");
rs = null;
}
try {
// System.out.println("1. PASS - Procedures: " + dmd.getDriverName());
rs = dmd.getProcedures(catalog, schemaPattern, null);
checkResultSet();
rs.close();
rs = dmd.getProcedures(catalog, schemaPattern, null);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - Procedures: " + dmd.getDriverName());
rs = dmd.getProcedures(null, schemaPattern, null);
checkResultSet();
rs.close();
rs = dmd.getProcedures(null, schemaPattern, null);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - Procedures: " + dmd.getDriverName());
rs = dmd.getProcedures(catalog, null, null);
checkResultSet();
rs.close();
rs = dmd.getProcedures(catalog, null, null);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - Procedures: " + dmd.getDriverName());
rs = dmd.getProcedures(null, null, null);
} catch (Exception ex3) {
System.out.println("NO PROCEDURES: " + ex3);
rs = null;
}
}
}
}
}
public void getPrimaryKeys(String catalog, DatabaseMetaData dmd, String table) {
String schema = null;
boolean caseindentifiers;
try {
caseindentifiers = dmd.storesMixedCaseIdentifiers();
if (!caseindentifiers) {
caseindentifiers = dmd.storesUpperCaseIdentifiers();
table = (caseindentifiers ? table.toUpperCase() : table.toLowerCase());
}
} catch (SQLException ex) {
// System.out.println("DrvSpecification: " + ex);
}
try {
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schema = dmd.getUserName().trim();
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getPrimaryKeys(catalog, schema, table);
return;
}
} catch (SQLException ex) {
// System.out.println("getPrimaryKeysAdaptor: CANNOT OBTAIN PRIMARYKEYS");
rs = null;
}
try {
// System.out.println("1. PASS - PrimaryKeys: " + dmd.getDriverName());
rs = dmd.getPrimaryKeys(catalog, schema, table);
checkResultSet();
rs.close();
rs = dmd.getPrimaryKeys(catalog, schema, table);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - PrimaryKeys: " + dmd.getDriverName());
rs = dmd.getPrimaryKeys(null, schema, table);
checkResultSet();
rs.close();
rs = dmd.getPrimaryKeys(null, schema, table);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - PrimaryKeys: " + dmd.getDriverName());
rs = dmd.getPrimaryKeys(catalog, null, table);
checkResultSet();
rs.close();
rs = dmd.getPrimaryKeys(catalog, null, table);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - PrimaryKeys: " + dmd.getDriverName());
rs = dmd.getPrimaryKeys(null, null, table);
} catch (Exception ex3) {
// System.out.println("NO PRIMARYKEYS: " + ex3);
rs = null;
}
}
}
}
}
public void getIndexInfo(String catalog, DatabaseMetaData dmd, String table, boolean unique, boolean approximate) {
String schema = null;
boolean caseindentifiers;
boolean jdbcOdbcBridge = false;
try {
caseindentifiers = dmd.storesMixedCaseIdentifiers();
if (!caseindentifiers) {
caseindentifiers = dmd.storesUpperCaseIdentifiers();
table = (caseindentifiers ? table.toUpperCase() : table.toLowerCase());
}
} catch (SQLException ex) {
// System.out.println("DrvSpecification: " + ex);
}
try {
jdbcOdbcBridge = (((java.sql.DriverManager.getDriver(dmd.getURL()) instanceof sun.jdbc.odbc.JdbcOdbcDriver) && (!dmd.getDatabaseProductName().trim().equals("DB2/NT"))) ? true : false);
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schema = dmd.getUserName().trim();
if (desc.get("getIndexInfo_Unique").equals("false"))
unique = false;
if (desc.get("getIndexInfo_Approximate").equals("true"))
approximate = true;
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getIndexInfo(catalog, schema, table, unique, approximate);
if (jdbcOdbcBridge) rsTemp = dmd.getIndexInfo(catalog, schema, table, unique, approximate);
return;
}
} catch (SQLException ex) {
// System.out.println("getIndexInfoAdaptor: CANNOT OBTAIN INDEXINFO");
rs = null;
rsTemp = null;
}
try {
// System.out.println("1. PASS - IndexInfo: " + dmd.getDriverName());
rs = dmd.getIndexInfo(catalog, schema, table, unique, approximate);
checkResultSet();
rs.close();
rs = dmd.getIndexInfo(catalog, schema, table, unique, approximate);
if (jdbcOdbcBridge) rsTemp = dmd.getIndexInfo(catalog, schema, table, unique, approximate);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - IndexInfo: " + dmd.getDriverName());
rs = dmd.getIndexInfo(null, schema, table, unique, approximate);
checkResultSet();
rs.close();
rs = dmd.getIndexInfo(null, schema, table, unique, approximate);
if (jdbcOdbcBridge) rsTemp = dmd.getIndexInfo(null, schema, table, unique, approximate);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - IndexInfo: " + dmd.getDriverName());
rs = dmd.getIndexInfo(catalog, null, table, unique, approximate);
checkResultSet();
rs.close();
rs = dmd.getIndexInfo(catalog, null, table, unique, approximate);
if (jdbcOdbcBridge) rsTemp = dmd.getIndexInfo(catalog, null, table, unique, approximate);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - IndexInfo: " + dmd.getDriverName());
rs = dmd.getIndexInfo(null, null, table, unique, approximate);
if (jdbcOdbcBridge) rsTemp = dmd.getIndexInfo(null, null, table, unique, approximate);
} catch (Exception ex3) {
// System.out.println("NO INDEXINFO: " + ex3);
rs = null;
rsTemp = null;
}
}
}
}
}
public void getColumns(String catalog, DatabaseMetaData dmd, String tableNamePattern, String columnNamePattern) {
String schemaPattern = null;
boolean caseindentifiers;
boolean jdbcOdbcBridge = false;
try {
caseindentifiers = dmd.storesMixedCaseIdentifiers();
if (!caseindentifiers) {
caseindentifiers = dmd.storesUpperCaseIdentifiers();
tableNamePattern = (caseindentifiers ? tableNamePattern.toUpperCase() : tableNamePattern.toLowerCase());
}
} catch (SQLException ex) {
// System.out.println("DrvSpecification: " + ex);
}
try {
jdbcOdbcBridge = (((java.sql.DriverManager.getDriver(dmd.getURL()) instanceof sun.jdbc.odbc.JdbcOdbcDriver) && (!dmd.getDatabaseProductName().trim().equals("DB2/NT"))) ? true : false);
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schemaPattern = dmd.getUserName().trim();
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
if (jdbcOdbcBridge) rsTemp = dmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
return;
}
} catch (SQLException ex) {
// System.out.println("getColumnsAdaptor: CANNOT OBTAIN COLUMNS");
rs = null;
rsTemp = null;
}
try {
// System.out.println("1. PASS - Columns: " + dmd.getDriverName());
rs = dmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
if (jdbcOdbcBridge) rsTemp = dmd.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - Columns: " + dmd.getDriverName());
rs = dmd.getColumns(null, schemaPattern, tableNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getColumns(null, schemaPattern, tableNamePattern, columnNamePattern);
if (jdbcOdbcBridge) rsTemp = dmd.getColumns(null, schemaPattern, tableNamePattern, columnNamePattern);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - Columns: " + dmd.getDriverName());
rs = dmd.getColumns(catalog, null, tableNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getColumns(catalog, null, tableNamePattern, columnNamePattern);
if (jdbcOdbcBridge) rsTemp = dmd.getColumns(catalog, null, tableNamePattern, columnNamePattern);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - Columns: " + dmd.getDriverName());
rs = dmd.getColumns(null, null, tableNamePattern, columnNamePattern);
if (jdbcOdbcBridge) rsTemp = dmd.getColumns(null, null, tableNamePattern, columnNamePattern);
} catch (Exception ex3) {
// System.out.println("NO COLUMNS: " + ex3);
rs = null;
rsTemp = null;
}
}
}
}
}
public void getProcedureColumns(String catalog, DatabaseMetaData dmd, String procedureNamePattern, String columnNamePattern) {
String schemaPattern = null;
try {
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schemaPattern = dmd.getUserName().trim();
if ((columnNamePattern == null) && (!desc.get("getProcedureColumns_ColumnNamePattern").equals("null")))
columnNamePattern = (String) desc.get("getProcedureColumns_ColumnNamePattern");
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getProcedureColumns(catalog, schemaPattern, procedureNamePattern, columnNamePattern);
return;
}
} catch (SQLException ex) {
// System.out.println("getProcedureColumnsAdaptor: CANNOT OBTAIN PROCEDURECOLUMNS");
rs = null;
}
try {
// System.out.println("1. PASS - ProcedureColumns: " + dmd.getDriverName());
rs = dmd.getProcedureColumns(catalog, schemaPattern, procedureNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getProcedureColumns(catalog, schemaPattern, procedureNamePattern, columnNamePattern);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - ProcedureColumns: " + dmd.getDriverName());
rs = dmd.getProcedureColumns(null, schemaPattern, procedureNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getProcedureColumns(null, schemaPattern, procedureNamePattern, columnNamePattern);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - ProcedureColumns: " + dmd.getDriverName());
rs = dmd.getProcedureColumns(catalog, null, procedureNamePattern, columnNamePattern);
checkResultSet();
rs.close();
rs = dmd.getProcedureColumns(catalog, null, procedureNamePattern, columnNamePattern);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - ProcedureColumns: " + dmd.getDriverName());
rs = dmd.getProcedureColumns(null, null, procedureNamePattern, columnNamePattern);
} catch (Exception ex3) {
// System.out.println("NO PROCEDURECOLUMNS: " + ex3);
rs = null;
}
}
}
}
}
public void getExportedKeys(String catalog, DatabaseMetaData dmd, String table) {
String schema = null;
boolean caseindentifiers;
try {
caseindentifiers = dmd.storesMixedCaseIdentifiers();
if (!caseindentifiers) {
caseindentifiers = dmd.storesUpperCaseIdentifiers();
table = (caseindentifiers ? table.toUpperCase() : table.toLowerCase());
}
} catch (SQLException ex) {
// System.out.println("DrvSpecification: " + ex);
}
try {
if (!getCatalog().equals("true"))
catalog = null;
if (getSchema().equals("true"))
schema = dmd.getUserName().trim();
if (!desc.get("DriverName").equals("DefaultDriver")) {
rs = dmd.getExportedKeys(catalog, schema, table);
return;
}
} catch (SQLException ex) {
// System.out.println("getExportedKeysAdaptor: CANNOT OBTAIN EXPORTEDKEYS");
rs = null;
}
try {
// System.out.println("1. PASS - ExportedKeys: " + dmd.getDriverName());
rs = dmd.getExportedKeys(catalog, schema, table);
checkResultSet();
rs.close();
rs = dmd.getExportedKeys(catalog, schema, table);
} catch (Exception ex) {
try {
// System.out.println("2. PASS - ExportedKeys: " + dmd.getDriverName());
rs = dmd.getExportedKeys(null, schema, table);
checkResultSet();
rs.close();
rs = dmd.getExportedKeys(null, schema, table);
} catch (Exception ex1) {
try {
// System.out.println("3. PASS - ExportedKeys: " + dmd.getDriverName());
rs = dmd.getExportedKeys(catalog, null, table);
checkResultSet();
rs.close();
rs = dmd.getExportedKeys(catalog, null, table);
} catch (Exception ex2) {
try {
// System.out.println("4. PASS - ExportedKeys: " + dmd.getDriverName());
rs = dmd.getExportedKeys(null, null, table);
} catch (Exception ex3) {
// System.out.println("NO EXPORTEDKEYS: " + ex3);
rs = null;
}
}
}
}
}
private void checkResultSet() throws Exception {
if (!rs.next()) {
rs.close();
throw new Exception();
}
}
}
/*
* <<Log>>
* 2 Gandalf 1.1 1/26/00 Radko Najman JDBC-ODBC bridge HACK
* 1 Gandalf 1.0 1/25/00 Radko Najman
* $
*/